const { contextBridge, ipcRenderer } = require('electron');

// 暴露安全的API给渲染进程
contextBridge.exposeInMainWorld('electronAPI', {
  // 应用信息
  getVersion: () => {
    try {
      return ipcRenderer.invoke('app-version');
    } catch (error) {
      console.error('Error getting app version:', error);
      return Promise.resolve('unknown');
    }
  },
  getPlatform: () => {
    try {
      return ipcRenderer.invoke('platform');
    } catch (error) {
      console.error('Error getting platform:', error);
      return Promise.resolve('unknown');
    }
  },
  
  // 菜单事件监听
  onMenuNewTask: (callback) => {
    ipcRenderer.on('menu-new-task', callback);
  },
  onMenuSettings: (callback) => {
    ipcRenderer.on('menu-settings', callback);
  },
  onMenuAbout: (callback) => {
    ipcRenderer.on('menu-about', callback);
  },
  
  // 移除监听器
  removeAllListeners: (channel) => {
    ipcRenderer.removeAllListeners(channel);
  },
  
  // 通知相关
  showNotification: (title, body) => {
    if ('Notification' in window && Notification.permission === 'granted') {
      new Notification(title, { body });
    }
  },
  
  // 请求通知权限
  requestNotificationPermission: async () => {
    if ('Notification' in window) {
      return await Notification.requestPermission();
    }
    return 'denied';
  },
  
  // 文件系统相关（如果需要）
  // 注意：这些API需要谨慎使用，确保安全性
  
  // 系统信息
  isElectron: true,
  
  // 窗口控制
  minimize: () => ipcRenderer.invoke('window-minimize'),
  maximize: () => ipcRenderer.invoke('window-maximize'),
  close: () => ipcRenderer.invoke('window-close'),
  
  // 开发工具
  openDevTools: () => ipcRenderer.invoke('open-dev-tools'),
  
  // 获取资源路径
  getResourcePath: async (relativePath) => {
    return await ipcRenderer.invoke('get-resource-path', relativePath);
  },
  
  // 打开外部链接
  openExternal: (url) => {
    return ipcRenderer.invoke('open-external', url);
  },
  
  // 应用关闭前同步相关的 IPC 通信
  onSyncBeforeQuit: (callback) => {
    ipcRenderer.on('sync-before-quit', callback)
  },
  sendSyncComplete: (result) => {
    ipcRenderer.send('sync-before-quit-complete', result)
  }
});

// 添加全局检查函数
window.checkElectronAPI = () => {
  console.log('Checking electronAPI availability:', {
    electronAPI: !!window.electronAPI,
    getVersion: !!(window.electronAPI && window.electronAPI.getVersion),
    getPlatform: !!(window.electronAPI && window.electronAPI.getPlatform)
  });
};

// 安全的初始化函数
function safeInitialize() {
  try {
    console.log('Electron preload script loaded');
    
    // 检查API可用性
    if (typeof window.checkElectronAPI === 'function') {
      window.checkElectronAPI();
    }
    
    // 添加Electron标识到body
    if (document.body) {
      document.body.classList.add('electron-app');
    }
    
    // 延迟设置版本信息，确保所有API都已准备就绪
    setTimeout(() => {
      try {
        // 设置应用版本信息（添加错误处理）
        if (window.electronAPI && typeof window.electronAPI.getVersion === 'function') {
          window.electronAPI.getVersion().then(version => {
            if (document.documentElement) {
              document.documentElement.setAttribute('data-app-version', version);
            }
          }).catch(error => {
            console.warn('Failed to get app version:', error);
          });
        } else {
          console.warn('electronAPI.getVersion is not available');
        }
        
        // 设置平台信息（添加错误处理）
        if (window.electronAPI && typeof window.electronAPI.getPlatform === 'function') {
          window.electronAPI.getPlatform().then(platform => {
            if (document.documentElement) {
              document.documentElement.setAttribute('data-platform', platform);
            }
            if (document.body) {
              document.body.classList.add(`platform-${platform}`);
            }
          }).catch(error => {
            console.warn('Failed to get platform:', error);
          });
        } else {
          console.warn('electronAPI.getPlatform is not available');
        }
      } catch (error) {
        console.error('Error in delayed initialization:', error);
      }
    }, 100); // 延迟100ms执行
    
  } catch (error) {
    console.error('Error in safeInitialize:', error);
  }
}

// 监听DOM加载完成
window.addEventListener('DOMContentLoaded', safeInitialize);

// 如果DOM已经加载完成，立即执行
if (document.readyState === 'loading') {
  // DOM还在加载中，等待DOMContentLoaded事件
} else {
  // DOM已经加载完成，立即执行
  safeInitialize();
}

// 错误处理
process.on('uncaughtException', (error) => {
  console.error('Uncaught Exception in preload:', error);
});

process.on('unhandledRejection', (reason, promise) => {
  console.error('Unhandled Rejection in preload:', reason);
});